/* 
axios进行二次封装
1.配置基础路径和超时时间
2.添加一个进度条
3.直接通过data拿到数据
4.错误统一处理或者分别处理/终止promise的链式使用返回一个请求中的promise
*/
import axios from 'axios';
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 对axios进行二次封装
const service = axios.create({
    baseURL:'/mock',//配置公共路径
    timeout:20000 //配置延迟时间
});

// 请求拦截器的作用拦截请求报文，并对其进行修改
service.interceptors.request.use((config)=>{
    Nprogress.start();//添加进度条
    return config //返回修改好的请求信息
})

// 响应拦截器
service.interceptors.response.use(
    (response)=>{
        Nprogress.done();//加载成功取消进度条
        return response.data//直接返回的是数据而不是响应体
    },
    (error)=>{
        Nprogress.done();//加载失败取消进度条
        alert("axios请求失败" + error.message);//统一处理失败信息
        return new Promise(()=>{})
        /* 终止promise链式调用，如果需要继续处理可以返回一个失败的promise对象
        内容是（自定义的失败信息，比如根据状态码返回不同的信息）new Error({error.message}) */
    }
)

// 向外暴露
export default service


